package main

import (
	"godemo/framework"
	"html"
	"net/http"
)

func main() {

	core := framework.NewCore()
	server := http.Server{
		Addr:    ":8081",
		Handler: core,
	}

	core.Get("/bar", func(c *framework.Context) error {
		// fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
		c.Json(200, map[string]string{"data": "Hello, " + html.EscapeString(c.GetRequest().URL.Path)})
		return nil
	})
	server.ListenAndServe()

	// // 创建一个Foo路由和处理函数
	// // http.Handle("/foo", fooHandler)

	// // 创建一个bar路由和处理函数
	// http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
	// 	fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
	// })

	// go func() {
	// 	time.Sleep(3 * time.Second)
	// 	req, _ := http.NewRequest("get", "http://localhost:8080/bar", nil)
	// 	resp, _ := http.DefaultClient.Do(req)
	// 	fmt.Println(resp)
	// }()

	// // 监听8080端口

	// http.ListenAndServe(":8080", nil)
	// fmt.Println("hello world xxxx.")

}

// func main() {
// 	c := context.Background()
// 	cancelCxt, cancel := context.WithDeadline(c, time.Now().Add(1*time.Second))

// 	go func() {
// 		defer func() {
// 			fmt.Println("goroutine ended.")
// 		}()
// 		fmt.Println("goroutine started.")
// 		for {
// 			select {
// 			//当超时或者调用cancel()的时候，这里会收到消息
// 			//根据错误的不同来判断错误原因是什么。
// 			case <-cancelCxt.Done():
// 				// fmt.Println("parent canceled.", cancelCxt.Err().Error())
// 				if cancelCxt.Err() == context.Canceled {
// 					fmt.Println("parent canceled.", cancelCxt.Err().Error())
// 				} else { // if cancelCxt.Err() == context.DeadlineExceeded {
// 					fmt.Println("context time out.", cancelCxt.Err().Error())
// 				}
// 				return
// 			case <-time.After(1 * time.Second):
// 				fmt.Println("timer checking...")
// 				// // return
// 				// default:
// 				// 	fmt.Println("......")
// 			}
// 		}

// 	}()

// 	time.Sleep(2 * time.Second)
// 	cancel()
// 	fmt.Println("main ended.")
// 	time.Sleep(2 * time.Second)

// }
